package com.lostreseditores.sabersai.presentation.backingBeans;

import java.util.List;
import java.util.TimeZone;

import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.event.RowEditEvent;

import com.lostreseditores.sabersai.exceptions.ZMessManager;
import com.lostreseditores.sabersai.model.Asignatura;
import com.lostreseditores.sabersai.model.dto.AsignaturaDTO;
import com.lostreseditores.sabersai.presentation.businessDelegate.BusinessDelegatorView;
import com.lostreseditores.sabersai.utilities.FacesUtils;


public class AsignaturaView {
    private InputText txtAsigdescripv;
    private InputText txtAsigdesvnacional;
    private InputText txtAsigdesvnacsaber;
    private InputText txtAsigpromnacional;
    private InputText txtAsigpromnacsaber;
    private InputText txtAsigxexamordfn;
    private InputText txtAsigxexamordn2n;
    private InputText txtAsigxexamordnn;
    private InputText txtAsigxexamordsn;
    private InputText txtClasasigidn_Claseasignatura;
    private InputText txtAsigidn;
    private CommandButton btnSave;
    private CommandButton btnModify;
    private CommandButton btnDelete;
    private CommandButton btnClear;
    private List<AsignaturaDTO> data;
    private AsignaturaDTO selectedAsignatura;

    public AsignaturaView() {
        super();
    }

    public void rowEventListener(RowEditEvent e) {
        try {
            AsignaturaDTO asignaturaDTO = (AsignaturaDTO) e.getObject();

            if (txtAsigdescripv == null) {
                txtAsigdescripv = new InputText();
            }

            txtAsigdescripv.setValue(asignaturaDTO.getAsigdescripv());

            if (txtAsigdesvnacional == null) {
                txtAsigdesvnacional = new InputText();
            }

            txtAsigdesvnacional.setValue(asignaturaDTO.getAsigdesvnacional());

            if (txtAsigdesvnacsaber == null) {
                txtAsigdesvnacsaber = new InputText();
            }

            txtAsigdesvnacsaber.setValue(asignaturaDTO.getAsigdesvnacsaber());

            if (txtAsigpromnacional == null) {
                txtAsigpromnacional = new InputText();
            }

            txtAsigpromnacional.setValue(asignaturaDTO.getAsigpromnacional());

            if (txtAsigpromnacsaber == null) {
                txtAsigpromnacsaber = new InputText();
            }

            txtAsigpromnacsaber.setValue(asignaturaDTO.getAsigpromnacsaber());

            if (txtAsigxexamordfn == null) {
                txtAsigxexamordfn = new InputText();
            }

            txtAsigxexamordfn.setValue(asignaturaDTO.getAsigxexamordfn());

            if (txtAsigxexamordn2n == null) {
                txtAsigxexamordn2n = new InputText();
            }

            txtAsigxexamordn2n.setValue(asignaturaDTO.getAsigxexamordn2n());

            if (txtAsigxexamordnn == null) {
                txtAsigxexamordnn = new InputText();
            }

            txtAsigxexamordnn.setValue(asignaturaDTO.getAsigxexamordnn());

            if (txtAsigxexamordsn == null) {
                txtAsigxexamordsn = new InputText();
            }

            txtAsigxexamordsn.setValue(asignaturaDTO.getAsigxexamordsn());

            if (txtClasasigidn_Claseasignatura == null) {
                txtClasasigidn_Claseasignatura = new InputText();
            }

            txtClasasigidn_Claseasignatura.setValue(asignaturaDTO.getClasasigidn_Claseasignatura());

            if (txtAsigidn == null) {
                txtAsigidn = new InputText();
            }

            txtAsigidn.setValue(asignaturaDTO.getAsigidn());

            action_modify();
        } catch (Exception ex) {
        }
    }

    public String action_clear() {
        if (txtAsigdescripv != null) {
            txtAsigdescripv.setValue(null);
            txtAsigdescripv.setDisabled(true);
        }

        if (txtAsigdesvnacional != null) {
            txtAsigdesvnacional.setValue(null);
            txtAsigdesvnacional.setDisabled(true);
        }

        if (txtAsigdesvnacsaber != null) {
            txtAsigdesvnacsaber.setValue(null);
            txtAsigdesvnacsaber.setDisabled(true);
        }

        if (txtAsigpromnacional != null) {
            txtAsigpromnacional.setValue(null);
            txtAsigpromnacional.setDisabled(true);
        }

        if (txtAsigpromnacsaber != null) {
            txtAsigpromnacsaber.setValue(null);
            txtAsigpromnacsaber.setDisabled(true);
        }

        if (txtAsigxexamordfn != null) {
            txtAsigxexamordfn.setValue(null);
            txtAsigxexamordfn.setDisabled(true);
        }

        if (txtAsigxexamordn2n != null) {
            txtAsigxexamordn2n.setValue(null);
            txtAsigxexamordn2n.setDisabled(true);
        }

        if (txtAsigxexamordnn != null) {
            txtAsigxexamordnn.setValue(null);
            txtAsigxexamordnn.setDisabled(true);
        }

        if (txtAsigxexamordsn != null) {
            txtAsigxexamordsn.setValue(null);
            txtAsigxexamordsn.setDisabled(true);
        }

        if (txtClasasigidn_Claseasignatura != null) {
            txtClasasigidn_Claseasignatura.setValue(null);
            txtClasasigidn_Claseasignatura.setDisabled(true);
        }

        if (txtAsigidn != null) {
            txtAsigidn.setValue(null);
            txtAsigidn.setDisabled(false);
        }

        if (btnSave != null) {
            btnSave.setDisabled(true);
        }

        if (btnDelete != null) {
            btnDelete.setDisabled(true);
        }

        if (btnModify != null) {
            btnModify.setDisabled(true);
        }

        if (btnClear != null) {
            btnClear.setDisabled(false);
        }

        return "";
    }

    public void listener_txtId() {
        Asignatura entity = null;

        try {
            Integer asigidn = new Integer(txtAsigidn.getValue().toString());
            entity = BusinessDelegatorView.getAsignatura(asigidn);
        } catch (Exception e) {
            // TODO: handle exception
        }

        if (entity == null) {
            txtAsigdescripv.setDisabled(false);
            txtAsigdesvnacional.setDisabled(false);
            txtAsigdesvnacsaber.setDisabled(false);
            txtAsigpromnacional.setDisabled(false);
            txtAsigpromnacsaber.setDisabled(false);
            txtAsigxexamordfn.setDisabled(false);
            txtAsigxexamordn2n.setDisabled(false);
            txtAsigxexamordnn.setDisabled(false);
            txtAsigxexamordsn.setDisabled(false);
            txtClasasigidn_Claseasignatura.setDisabled(false);
            txtAsigidn.setDisabled(false);
            btnSave.setDisabled(false);
            btnDelete.setDisabled(true);
            btnModify.setDisabled(true);
            btnClear.setDisabled(false);
        } else {
            txtAsigdescripv.setValue(entity.getAsigdescripv());
            txtAsigdescripv.setDisabled(false);
            txtAsigdesvnacional.setValue(entity.getAsigdesvnacional());
            txtAsigdesvnacional.setDisabled(false);
            txtAsigdesvnacsaber.setValue(entity.getAsigdesvnacsaber());
            txtAsigdesvnacsaber.setDisabled(false);
            txtAsigpromnacional.setValue(entity.getAsigpromnacional());
            txtAsigpromnacional.setDisabled(false);
            txtAsigpromnacsaber.setValue(entity.getAsigpromnacsaber());
            txtAsigpromnacsaber.setDisabled(false);
            txtAsigxexamordfn.setValue(entity.getAsigxexamordfn());
            txtAsigxexamordfn.setDisabled(false);
            txtAsigxexamordn2n.setValue(entity.getAsigxexamordn2n());
            txtAsigxexamordn2n.setDisabled(false);
            txtAsigxexamordnn.setValue(entity.getAsigxexamordnn());
            txtAsigxexamordnn.setDisabled(false);
            txtAsigxexamordsn.setValue(entity.getAsigxexamordsn());
            txtAsigxexamordsn.setDisabled(false);
            txtClasasigidn_Claseasignatura.setValue(entity.getClaseasignatura()
                                                          .getClasasigidn());
            txtClasasigidn_Claseasignatura.setDisabled(false);
            txtAsigidn.setValue(entity.getAsigidn());
            txtAsigidn.setDisabled(true);
            btnSave.setDisabled(true);
            btnDelete.setDisabled(false);
            btnModify.setDisabled(false);
            btnClear.setDisabled(false);
        }
    }

    public String action_save() {
        try {
            BusinessDelegatorView.saveAsignatura(FacesUtils.checkString(
                    txtAsigdescripv),
                FacesUtils.checkLong(txtAsigdesvnacional),
                FacesUtils.checkLong(txtAsigdesvnacsaber),
                FacesUtils.checkInteger(txtAsigidn),
                FacesUtils.checkLong(txtAsigpromnacional),
                FacesUtils.checkLong(txtAsigpromnacsaber),
                FacesUtils.checkInteger(txtAsigxexamordfn),
                FacesUtils.checkInteger(txtAsigxexamordn2n),
                FacesUtils.checkInteger(txtAsigxexamordnn),
                FacesUtils.checkInteger(txtAsigxexamordsn),
                FacesUtils.checkInteger(txtClasasigidn_Claseasignatura));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_delete() {
        try {
            BusinessDelegatorView.deleteAsignatura(FacesUtils.checkInteger(
                    txtAsigidn));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modify() {
        try {
            BusinessDelegatorView.updateAsignatura(FacesUtils.checkString(
                    txtAsigdescripv),
                FacesUtils.checkLong(txtAsigdesvnacional),
                FacesUtils.checkLong(txtAsigdesvnacsaber),
                FacesUtils.checkInteger(txtAsigidn),
                FacesUtils.checkLong(txtAsigpromnacional),
                FacesUtils.checkLong(txtAsigpromnacsaber),
                FacesUtils.checkInteger(txtAsigxexamordfn),
                FacesUtils.checkInteger(txtAsigxexamordn2n),
                FacesUtils.checkInteger(txtAsigxexamordnn),
                FacesUtils.checkInteger(txtAsigxexamordsn),
                FacesUtils.checkInteger(txtClasasigidn_Claseasignatura));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
            action_clear();
        } catch (Exception e) {
            data = null;
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String actionDeleteDataTableEditable() {
        try {
            if (txtAsigidn == null) {
                txtAsigidn = new InputText();
            }

            txtAsigidn.setValue(selectedAsignatura.getAsigidn());

            BusinessDelegatorView.deleteAsignatura(FacesUtils.checkInteger(
                    txtAsigidn));
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
            data.remove(selectedAsignatura);
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modifyWitDTO(String asigdescripv,
        Long asigdesvnacional, Long asigdesvnacsaber, Integer asigidn,
        Long asigpromnacional, Long asigpromnacsaber, Integer asigxexamordfn,
        Integer asigxexamordn2n, Integer asigxexamordnn,
        Integer asigxexamordsn, Integer clasasigidn_Claseasignatura)
        throws Exception {
        try {
            BusinessDelegatorView.updateAsignatura(asigdescripv,
                asigdesvnacional, asigdesvnacsaber, asigidn, asigpromnacional,
                asigpromnacsaber, asigxexamordfn, asigxexamordn2n,
                asigxexamordnn, asigxexamordsn, clasasigidn_Claseasignatura);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
        } catch (Exception e) {
            //renderManager.getOnDemandRenderer("AsignaturaView").requestRender();
            FacesUtils.addErrorMessage(e.getMessage());
            throw e;
        }

        return "";
    }

    public InputText getTxtAsigdescripv() {
        return txtAsigdescripv;
    }

    public void setTxtAsigdescripv(InputText txtAsigdescripv) {
        this.txtAsigdescripv = txtAsigdescripv;
    }

    public InputText getTxtAsigdesvnacional() {
        return txtAsigdesvnacional;
    }

    public void setTxtAsigdesvnacional(InputText txtAsigdesvnacional) {
        this.txtAsigdesvnacional = txtAsigdesvnacional;
    }

    public InputText getTxtAsigdesvnacsaber() {
        return txtAsigdesvnacsaber;
    }

    public void setTxtAsigdesvnacsaber(InputText txtAsigdesvnacsaber) {
        this.txtAsigdesvnacsaber = txtAsigdesvnacsaber;
    }

    public InputText getTxtAsigpromnacional() {
        return txtAsigpromnacional;
    }

    public void setTxtAsigpromnacional(InputText txtAsigpromnacional) {
        this.txtAsigpromnacional = txtAsigpromnacional;
    }

    public InputText getTxtAsigpromnacsaber() {
        return txtAsigpromnacsaber;
    }

    public void setTxtAsigpromnacsaber(InputText txtAsigpromnacsaber) {
        this.txtAsigpromnacsaber = txtAsigpromnacsaber;
    }

    public InputText getTxtAsigxexamordfn() {
        return txtAsigxexamordfn;
    }

    public void setTxtAsigxexamordfn(InputText txtAsigxexamordfn) {
        this.txtAsigxexamordfn = txtAsigxexamordfn;
    }

    public InputText getTxtAsigxexamordn2n() {
        return txtAsigxexamordn2n;
    }

    public void setTxtAsigxexamordn2n(InputText txtAsigxexamordn2n) {
        this.txtAsigxexamordn2n = txtAsigxexamordn2n;
    }

    public InputText getTxtAsigxexamordnn() {
        return txtAsigxexamordnn;
    }

    public void setTxtAsigxexamordnn(InputText txtAsigxexamordnn) {
        this.txtAsigxexamordnn = txtAsigxexamordnn;
    }

    public InputText getTxtAsigxexamordsn() {
        return txtAsigxexamordsn;
    }

    public void setTxtAsigxexamordsn(InputText txtAsigxexamordsn) {
        this.txtAsigxexamordsn = txtAsigxexamordsn;
    }

    public InputText getTxtClasasigidn_Claseasignatura() {
        return txtClasasigidn_Claseasignatura;
    }

    public void setTxtClasasigidn_Claseasignatura(
        InputText txtClasasigidn_Claseasignatura) {
        this.txtClasasigidn_Claseasignatura = txtClasasigidn_Claseasignatura;
    }

    public InputText getTxtAsigidn() {
        return txtAsigidn;
    }

    public void setTxtAsigidn(InputText txtAsigidn) {
        this.txtAsigidn = txtAsigidn;
    }

    public List<AsignaturaDTO> getData() {
        try {
            if (data == null) {
                data = BusinessDelegatorView.getDataAsignatura();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return data;
    }

    public void setData(List<AsignaturaDTO> asignaturaDTO) {
        this.data = asignaturaDTO;
    }

    public AsignaturaDTO getSelectedAsignatura() {
        return selectedAsignatura;
    }

    public void setSelectedAsignatura(AsignaturaDTO asignatura) {
        this.selectedAsignatura = asignatura;
    }

    public CommandButton getBtnSave() {
        return btnSave;
    }

    public void setBtnSave(CommandButton btnSave) {
        this.btnSave = btnSave;
    }

    public CommandButton getBtnModify() {
        return btnModify;
    }

    public void setBtnModify(CommandButton btnModify) {
        this.btnModify = btnModify;
    }

    public CommandButton getBtnDelete() {
        return btnDelete;
    }

    public void setBtnDelete(CommandButton btnDelete) {
        this.btnDelete = btnDelete;
    }

    public CommandButton getBtnClear() {
        return btnClear;
    }

    public void setBtnClear(CommandButton btnClear) {
        this.btnClear = btnClear;
    }

    public TimeZone getTimeZone() {
        return java.util.TimeZone.getDefault();
    }
}
